home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / diskutil / noahdi.zoo / noahdi / hddriver.h < prev    next >
Text File  |  1992-05-24  |  5KB  |  121 lines

  1. /*
  2.     File: HDDRIVER.H       Harddisk driver stuff
  3.  
  4.     Oct 1988. V1.00 T.H. Schipper
  5. */
  6. /*
  7. Copyright (c) 1988 - 1991 by Ted Schipper.
  8.  
  9. Permission to use, copy, modify, and distribute this software and its
  10. documentation for any purpose and without fee is hereby granted,
  11. provided that the above copyright notice appear in all copies and that
  12. both that copyright notice and this permission notice appear in
  13. supporting documentation.
  14.  
  15. This software is provided AS IS with no warranties of any kind.  The author
  16. shall have no liability with respect to the infringement of copyrights,
  17. trade secrets or any patents by this file or any part thereof.  In no
  18. event will the author be liable for any lost revenue or profits or
  19. other special, indirect and consequential damages.
  20. */
  21.  
  22. #define FALSE      0
  23. #define TRUE       1
  24.  
  25. #define OK         0L           /* OK status */
  26. #define ERROR     -1L           /* ERROR status (timeout) */
  27. #define ERRORL    -2L           /* ERROR status (long timeout) */
  28. #define EWRITF    -10           /* GEMDOS write error code */
  29. #define EREADF    -11           /* GEMDOS read error code */
  30. #define CRITRETRY 0x00010000L   /* RETRY return code */
  31.  
  32. #define NRETRIES   3            /* number of times to retry -1 */
  33. #define MAX_UNITS  16           /* Max number of drives attached */
  34. #define MAXSECTORS 254          /* Max # sectors for a DMA */
  35. #define MAXRETRIES 1
  36.  
  37. /* Timing constants */
  38.  
  39. #define LTIMEOUT   600L         /* long-timeout 3 sec */
  40. #define STIMEOUT    20L         /* short-timeout 100 msec */
  41.  
  42. /* RWABS flags */
  43.  
  44. #define RW_FLAG       0x01      /* flag for read/write */
  45. #define MEDIACH_FLAG  0x02      /* flag for read/write with mediachange */
  46. #define RETRY_FLAG    0x04      /* flag for read/write with retries */
  47. #define PHYSOP_FLAG   0x08      /* flag for physical/logical read/write */
  48.  
  49. /* ASCI Commands */
  50.  
  51. #define HD_TDR   0x00           /* Test Drive Ready */
  52. #define HD_RS    0x03           /* Request Sense */
  53. #define HD_FD    0x04           /* Format Drive */
  54. #define HD_READ  0x08           /* Read */
  55. #define HD_WRITE 0x0A           /* Write */
  56. #define HD_SEEK  0x0B           /* Seek */
  57. #define HD_MSEL  0x15           /* Mode Select */
  58.  
  59. typedef long (*func)();         /* pointer to function returning a long */
  60.  
  61.  
  62. /* Logical Drive Info */
  63.  
  64.  struct hd_drv {
  65.             short dev_addr;     /* physical unit ASCI address */
  66.             long  part_start;   /* start sector logical unit */
  67.                } ;
  68.  
  69.  
  70. /* Availible functions in the HD_XXXXX.C modules */
  71.  
  72. /* HD_FRONT.C */
  73.  
  74. long  hbpb();            /* Return pointer to BPB of device */
  75. long  hrw();             /* Read/write of a device */
  76. long  hmediach();        /* Check if media has changed */
  77. short check_dev();       /* Check if device belongs to this driver */
  78.  
  79. /* HD_MED.C */
  80.  
  81. long  sasi_init();       /* Initialize SASI device */
  82. long  sasi_bpb();        /* Return pointer to device BPB */
  83. long  sasi_rw();         /* Read/write harddisk device sectors */
  84. void  smove();           /* Copy sectors arround in memory */
  85. long  do_rw();           /* Read/write no more than 254 sectors */
  86. long  sasi_mediach();    /* Check if harddisk media has changed */
  87.  
  88. /* HD_LOW.C */
  89.  
  90. long  hwrite();          /* Write to physical sectors on hard disk */
  91. long  hread();           /* Read physical sectors from hard disk */
  92. long  endcmd();          /* Wait for end of ASCI command and get status */
  93. long  setss();           /* Set ASCI drive, sector # and number of sectors */
  94. long  hdone();           /* Restore DMA device to normal */
  95. void  setdma();          /* Setup DMA base (transfer) address */
  96. long  qdone();           /* Wait for command byte handshake */
  97. long  fdone();           /* Wait for operation done handshake */
  98. long  wait_dma_cmpl();   /* Wait for DMA interrupt with timeout */
  99.  
  100. /* HD_INST.C */
  101.  
  102. void  exec_res();        /* Execute memory resident programs */
  103. void  exec_auto_prg();   /* Start auto-folder execute process */
  104. void  auto_prg();        /* Auto-folder search and execute program */
  105. short pool_install();    /* Extend the OS pool buffer */
  106. int   i_sasi1();         /* Normal entry point */
  107. long  pread();           /* Read physical sectors from harddisk with retries */
  108. void  ppu();             /* Partition physical unit */
  109. short nxtdrv();          /* Set TOS logical drive, check next one */
  110. long  getbpb();          /* Build a BPB block for a partition */
  111. short getlhw();          /* Swop short from INTEL to Motorola format */
  112.  
  113. /* HD_EXTRA.C */
  114.  
  115. long  wd_format();       /* Format hard disk */
  116. long  wd_msel();         /* Mode select. Specify drive format parameters */
  117. long  dosahxc();         /* Send an ASCI command with timeout */
  118. long  send_cmd();        /* Send an ASCI command with timeout */
  119. long  req_sense();       /* Request sense. Return Status Error Code */
  120.  
  121.